#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <iostream>
#include <vector>
using namespace std;

#define N 5

int main()
{
    vector<int> vt;
    int i = 0;
    for (; i < N; i++)
    {
        pid_t id = fork();
        if (id == 0)
        {
            //子进程
            int cnt = 5;
            while (cnt)
            {
                printf("子进程正在执行...: %d，pid: %d\n", cnt, getpid());
                cnt--;
                sleep(1);
            }
            printf("子进程结束了\n");
            exit(1);
        }
	vt.push_back(id);
    }

    //父进程
    printf("父进程正在等在子进程...\n");
    sleep(10);

    for (auto& pid : vt)
    {
        int status = 0;
        pid_t rid = waitpid(pid, &status, 0);
        if (rid > 0)
        {
            printf("等待完成，子进程的pid：%d，exit_code: %d，exit_signal: %d\n", rid, (status >> 8) & 0xFF, status & 0x7F);
        }
    }
    sleep(5);
    return 0;

}
















































//int main()
//{
//	int i = 0;
//	for (; i < N; i++)
//	{
//		pid_t id = fork();
//		if (id == 0)
//		{
//			//子进程
//			int cnt = 5;
//			while (cnt)
//			{
//				printf("子进程正在执行...: %d，pid: %d\n", cnt,getpid());
//				cnt--;
//				sleep(1);
//				int* p;
//				*p=10;
//			}
//			printf("子进程结束了\n");
//			exit(1);
//		}
//	}
//
//	//父进程
//	printf("父进程正在等在子进程...\n");
//	sleep(5);
//        
//        int j=0;
//	for (; j < N; j++)
//	{
//
//		int status=0;
//		pid_t rid = waitpid(-1,&status,0);
//		if (rid > 0)
//		{
//			printf("等待完成，子进程的pid：%d，exit_code: %d，exit_signal: %d\n", rid,(status>>8)&0xFF,status & 0x7F);
//		}
//	}
//	sleep(5);
//	return 0;
//}


































//int main()
//{
//	int num = 5;
//	while (num--)
//	{
//	    pid_t id = fork();
//	    if (id == 0)
//	    {   
//		//子进程
//		int cnt = 5;
//		while (cnt)
//		{
//			printf("子进程正在执行...: %d\n", cnt);
//			cnt--;
//			sleep(1);
//		}
//		printf("子进程结束了\n");
//		exit(0);
//	    }  
//        } 
//	//父进程
//	printf("父进程正在等在子进程...\n");
//	sleep(10);
//
//	
//
//	sleep(5);
//	return 0;
//}
